<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 导入依赖 -->
    <script src="https://lib.baomitu.com/leaflet/1.9.2/leaflet.js"></script>
    <link rel="stylesheet" href="https://lib.baomitu.com/leaflet/1.9.2/leaflet.css">
    <style>
        * {
            margin: 0;
            padding: 0
        }

        #map {
            width: 100vw;
            height: 100vh;
        }

        #btn {
            position: fixed;
            z-index: 1000;
            width: 200px;
            height: 60px;
            top: 10px;
            right: 30px;
        }
    </style>
</head>

<body>
    <button id="btn" onclick="clearMarker()">清除标注</button>
    <div id="map">

    </div>
    <script>
        /* 加载瓦片地图 */
        var url = 'https://api.mapbox.com/styles/v1/mapbox/streets-v11/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoiY2hlbmdiZW5jaGFvIiwiYSI6ImNsODU3aGRiODA0Y2UzcHBzZmFlcmdqZ2sifQ.8k59W_pB_Riwe6o-MneRlA'
        var layer = L.tileLayer(url, {
            maxZoom: 19,
            attribution: '© OpenStreetMap'
        })
        const map = L.map("map", {
            layers: [layer],
            /* center:[纬度,经度] */
            center: [30.50, 114.30],
            zoom: 4
        })
        // let marker = L.marker([30.50, 114.30]);
        // map.addLayer(marker);
        /* 点击事件添加marker */
        map.on("click", evt => {
            var { lng, lat } = evt.latlng;
            let marker = L.marker([lat, lng], {
                // my_mark: "marker",
                title: "marker"
            });
            // 多了第二个参数，是一个对象，里边有一些配置选项（如：title，表示title属性）
            map.addLayer(marker)
        })

        function clearMarker() {
            /* 获取所有的标记 */
            // console.log(map._layers); // {一个包含了当前地图上所有图层的对象}
            var layers = Object.values(map._layers);// 可以把这个对象的值转换为一个数组
            // console.log(layers);
            // console.log(layer.__proto__ === layers[0].__proto__)// true
            // console.log(layers[0] instanceof layer.__proto__.constructor)// true
            // 然后对转换成的数组进行遍历。
            // !标记图层的【options】属性下有【options.title】属性，属性值为【'marker'】。
            // !非标记图层（比如leaflet一开始加载的地图（瓦片图层））的options下没有my_mark属性。
            // var m_layers = layers.filter(item => item.options.my_mark === "marker");
            var m_layers = layers.filter(item => item.options.title === "marker");
            // item.options.title:悬停在标记（marker）上时出现的浏览器 tooltip 提示文本内容（默认情况下没有 tooltip 提示）
            // console.log(m_layers)
            m_layers.forEach(item => item.remove())
        }
    </script>
</body>

</html>